/**
 * 
 */
package vue;

import vue.session.IGCNFUse;
import vue.session.IGExecutionBlock;
import vue.session.IGPreprocessorBlock;
import vue.session.IGSolverBlock;
import vue.session.IIGModificationListener;

/**
 * Interface for a part of IGSAT application.
 * 
 * @author GRONOWSKI Stephane svan001@aol.com
 * 
 *         igsat 2010
 * 
 */
public interface IIGSATPart extends IIGModificationListener {

	/**
	 * Notify the SatPart that a {@link IGCNFUse} has been added to the session.
	 * 
	 * @param cnfuse
	 *            the cnfuse added
	 */
	public void addCNFUse(IGCNFUse cnfuse);

	/**
	 * Notify the SatPart that a {@link IGSolverBlock} has been added to the session.
	 * 
	 * @param cnfuse
	 *            the cnfuse on witch the solver was added
	 * @param solver
	 *            the solver added
	 */
	public void addSolver(IGCNFUse cnfuse, IGSolverBlock solver);


	/**
	 * <p>
	 * Notify the SatPart that a {@link IGPreprocessorBlock} has been added to the session.
	 * </p>
	 * <p>
	 * /!\ add the res {@link IGCNFUse} first
	 * </p>
	 * 
	 * @param cnfuse
	 *            the cnfuse on witch the preprocessor was added
	 * @param preproc
	 *            the preprocessor added
	 * @param res
	 *            the preprocessor result
	 */
	public void addPreprocessor(IGCNFUse cnfuse, IGPreprocessorBlock preproc, IGCNFUse res);

	/**
	 * Notify the SatPart that a {@link IGExecutionBlock} has been add to the session.
	 * 
	 * @param cnfuse
	 *            the cnfuse on witch the execution was added
	 * @param exec
	 *            the execution added
	 */
	public void addExecution(IGCNFUse cnfuse, IGExecutionBlock exec);

}
